package com.ht.api.bigtask.impl.qywx;

import java.util.HashMap;
import java.util.Map;

import com.ht.api.bigtask.BaseBigTask;
import com.ht.api.db.Db;
import com.ht.api.db.Entity;
import com.ht.api.open.OpenUtil;
import com.ht.api.util.ParamParser;

import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;

/**
 * 大任务：【企业微信】第四步，根据群列表，循环获取群详情
 * @author asq
 * @createTime 2025年1月15日 09:21:41
 */
@Slf4j
public class QueryChatInfoTask extends BaseBigTask {
	/** 接口ID */
	private static final long API_ID = 1878802525369536512L;

	@Override
	protected void doExecute(String appId, JSONObject context, Entity bean) {
		// 如果本任务已完成，则不再重复执行
		if (isOver()) {
			log.info("[BigTask]本任务已完成，不再重复执行，任务名：QueryChatInfoTask，【企业微信】第四步，根据群列表，循环获取群详情");
			return;
		}
		long t = System.currentTimeMillis();
		
		// 从上下文中获取参数
		JSONArray chatList = context.getJSONArray("group_chat_list");
		
		// 执行自身任务
		JSONObject apiConfig = getApiConfig(API_ID);
		for (int i = getPageNum(); i < chatList.size(); i++) {
			JSONObject chat = chatList.getJSONObject(i);
			// 组装接口参数
			Map<String, Object> values = new HashMap<>();
	        values.put("chat_id", chat.getStr("chat_id"));
	        values.put("need_name", 1);
	        JSONObject assembled = new ParamParser().assembleJson(apiConfig.getJSONArray("param"), values);
	        
	        // 调用接口
			String str = OpenUtil.call(appId, API_ID, assembled, true);
			
			// 写入租户库的open_data表
			JSONObject entity = JSONUtil.parseObj(str);
			Db.insert(getTenantDs(appId), createOpenDataEntity(appId, API_ID, entity));
			
			// 记录任务进度（任务进度是每个任务节点各记各的，互不影响）
			saveInfo(PAGE_NUM_NAME, i + 1, bean);
		}
		log.info("[BigTask]完成【企业微信】第四步，根据群列表，循环获取群详情，耗时：{}ms", (System.currentTimeMillis() - t));
	}
}
